import { isDef, isObject } from '.'
var hasOwnProperty = Object.prototype.hasOwnProperty

function assignKey(to, from, key) {
  var val = from[key]

  if (!isDef(val)) {
    return
  }

  if (!hasOwnProperty.call(to, key) || !isObject(val)) {
    to[key] = val
  } else {
    to[key] = deepAssign(Object(to[key]), from[key])
  }
}

export function deepAssign(to, from) {
  Object.keys(from).forEach(function(key) {
    assignKey(to, from, key)
  })
  return to
}
